/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package pooproj.regra;

import java.util.ArrayList;
import pooproj.basica.Midia;
import pooproj.erro.AllgemeinException;
import pooproj.erro.ConexaoException;
import pooproj.erro.ConsultaException;
import pooproj.repositorio.RepositorioMidia;
import pooproj.repositorio.RepositorioMidiaImpl;

/**
 *
 * @author Daniella
 */
public class RNMidia {
    
    private RepositorioMidia rep;
    
    public RNMidia(){
        rep = new RepositorioMidiaImpl();
    }
    
    /**
     * Para função de inserir nova midia
     * Valida se tipo de midia foi preenchido corretamente
     * @param m
     * @throws AllgemeinException
     */
    public void valida(Midia m) throws AllgemeinException{
        if(m.getValido()!=null){
            throw new AllgemeinException("emptyfield",m.getValido());
        }
        
        if(m.getTipoMidia().trim().length()<2){
            throw new AllgemeinException("invalidvalue");
        }
    }
    
    
    /**
     * Para função de inserir nova midia
     * inclui registro midia
     * @param m
     * @throws AllgemeinException
     */
    public void cadastra(Midia m) throws AllgemeinException{
        try{
            rep.inserir(m);
        } catch (ConexaoException | ConsultaException e){
            throw new AllgemeinException("database"); 
        }
    }
    
    /**
     * Verifica se  midia informada existe no BD
     * Auxilia a utilização de alguns dos demais métodos
     * @param m
     * @throws AllgemeinException
     */
    public void verificaExiste(Midia m) throws AllgemeinException{
        if(consulta(m.getCodMidia())==null){
            throw new AllgemeinException("notfound");
        }
    }
    
    
    /**
     * Para função de consulta midia a partir do cod da midia
     * Varre registros e retorna midia
     * @param id
     * @return Midia
     * @throws AllgemeinException
     */
    public Midia consulta(int id) throws AllgemeinException{
        Midia m;
        try{
            m = rep.consultar(id); 
        } catch (ConexaoException | ConsultaException e){
            throw new AllgemeinException("database");
        }
        return m;
    }
    
    /**
     * Método consulta Midia a partir do codigo do filme
     * @param codFilme
     * @return Midia
     * @throws AllgemeinException
     */
    public Midia consultaCodFilme(int codFilme) throws AllgemeinException{
        Midia m;
        try{
            m = rep.consultarCodFilme(codFilme); 
        } catch (ConexaoException | ConsultaException e){
            throw new AllgemeinException("database");
        }
        return m;
    }
    
    /**
     * Para função de atualizar Midia
     * @param m
     * @throws AllgemeinException
     */
    public void altera(Midia m) throws AllgemeinException{
        try{
            rep.alterar(m);
        } catch (ConexaoException | ConsultaException e){
            throw new AllgemeinException("database");
        }
    }
    
    /**
     * Para função de gerar lista de midias
     * @return list
     * @throws AllgemeinException
     */
    public ArrayList<Midia> lista() throws AllgemeinException{
        ArrayList<Midia> list;
        try{
            list = rep.listar();
            
        } catch (ConexaoException | ConsultaException e){
            throw new AllgemeinException("database");
        }
        return list;
    }
    
    /**
     * Para função excluir cadastro de midia
     * @param m
     * @throws AllgemeinException
     */
    public void exclui(Midia m) throws AllgemeinException{
        try{
            rep.excluir(m);
        } catch (ConexaoException | ConsultaException e){
            throw new AllgemeinException("database");
        }
    }
}
